\chapter{国内外研究现状}\label{chap:background}{

如何缓解“内存墙”问题以提升处理器性能是一个经久不衰的研究课题，目前主流的方法是通过更先进的缓存以加速处理器访存效率，许多研究人员围绕着片上缓存领域展开了研究工作。本章首先介绍了缓存组织结构的发展，随后对围绕着缓存开展的相关领域研究工作进行介绍，同时还介绍了最新的用于缓解“内存墙”问题的混合内存技术。

\section{缓存组织结构的发展}


缓存本质上是一个较快的存储模块，但是为了能在存储模块中索引所需要的信息，缓存还需要元数据，如标签（Tag），状态位 等，来进行辅助。因此，如何处理标签与数据（Data）之间的关系，发展出了若干种不同的组织结构。

最传统的组织方式包括全相连，直接相连与组相连，这三者本质上都是一个元数据对应一个数据的结构，只是在地址进行存放的时候可映射的位置不同。同一地址可以存放于缓存任一位置的缓存即为全相连，同一地址只能存放于一个位置的设计即为直接相连，而同一地址可以映射到一个组中任一位置（称为路）的设计即为组相连，这也是目前使用最多的设计方案，几乎所有现代缓存均采用了组相连的设计。

传统的组相连设计中，一个组中的路数是固定的。但是缓存中的组使用率不均匀，因此有学者提出了异构路大小的缓存\citep{Abella_González_2006}，在该设计中，每个组中包含的路数可以不一致。Bobbala等人的工作中\citep{Bobbala_Salvatierra_Lee_2010}提出了一个伪关联式缓存，在每一个组中只有第一路包含着独占的数据，而其他的路只包含标签资源，数据资源需要从全局的数据阵列中进行共享。

一般的组相连设计中，一个标签对应着一个完整的数据，而一些学者在试图打破这限制。如Decoupled Sectored Caches\citep{Seznec_2002}的工作中，作者实现了标签和数据之间路数的自由设定，两者之间可以自由映射。Footprint Cache\citep{Jevdjic_Volos_Falsafi_2013}的工作中，缓存以4KB页大小来管理，但是加载数据时只部分加载未来可能被使用的数据块。

有研究表明，缓存的关联度主要取决于其替换数据时备选的替换列表数量。基于这一观察，许多学者提出了在替换数据时有更大的搜索空间的设计。如V-Way Cache工作中\citep{Qureshi_Thompson_Patt_2005}所有的标签共享一的全局的数据池，在插入新数据时，会从全局数据池中搜索待逐出的旧数据。而ZCache\citep{Sanchez_Kozyrakis_2010}工作中，作者使用了一种复杂的N叉树算法以在更广泛的区域搜索待逐出块。

随着缓存容量的增大，从CPU核到缓存各存储单元的数据传输延迟变得不可忽略，因此有学者提出允许以不均匀的时间来访问缓存各部分的内容，使得部分数据可以更快地进行访问以提升缓存效率，即非均一缓存访问（Non-Uniform Cache Access，NUCA）。商用处理器通常使用的是静态NUCA（Static NUCA, S-NUCA）\citep{Kim_Burger_Keckler_2002}的设计，即数据根据固定的函数映射到缓存的某一位置。而许多学者试图研究动态NUCA（Dynamic NUCA, D-NUCA）的设计方案，在D-NUCA中数据可以动态地进行迁移，使得频繁访问的数据更接近对应的CPU核，从而试图获得比S-NUCA更高的性能。

与传统缓存的设计中将缓存视为一个整体不同，在NUCA缓存的设计中，设计者往往以更细粒度地去管理缓存。如以缓存的存储块（Bank）为粒度，如ASR\citep{Beckmann_Marty_Wood_2006}、ESP-NUCA\citep{Merino_Puente_Gregorio_2010}等工作中以Bank粒度对缓存进行切分，在处理器核进行缓存访问时会先查找主块（Home Bank），如果未找到，再去查找更远的块是否存在着所需数据。还有的学者以页（Page）为粒度进行管理，并配合操作系统与TLB进行数据的查找，使得处理器可以直接获取对应数据在缓存中存放的位置，如PageNUCA\citep{Chaudhuri_2009}、Jigsaw\citep{Beckmann_Sanchez_2013}等工作。

从缓存组织结构的发展可以看出，缓存组织结构的发展趋势是灵活化、精细化与动态化。通过根据目标优化场景选择更适合的缓存结构，有助于更好地提升缓存的性能。

\section{片上总线协议}

在一个完整的处理器系统中，通常会将处理器核和末级缓存作为独立的模块存在。它们通过片上总线协议相互连接，同时与其他重要模块一起构成了片上系统（System on Chip, SoC）。片上总线协议在系统中扮演着关键的角色，它不仅定义了模块之间的通信规则和数据传输方式，还直接影响了系统的性能和效率。

Wishbone\citep{wbspec_b3}是一个开源的片上总线协议，其目的是为了缓解片上系统集成标准不一致的问题，希望在IP核之间创建通用的接口来提升模块设计的重用性。Wishbone协议中，所有操作共用一个通道，并且操作完成后才能释放总线供下一操作使用，导致其性能较低。在缓存的支持方面，Wishbone协议并没有原生支持缓存一致性协议。这导致了其应用场景以资源受限的系统为主，而不适用于高性能场景。

OCP (Open Core Protocol)\citep{ocp_spec}是一个开放、可配置的片上总线协议，其最大的特点是有多种可配置的行为选项、功能扩展，以适应不同的处理器与外设。OCP协议中实现了请求与响应通道的分离，当请求成功发送后可以立即发送下一个请求而不需要等待响应的到来，这提升了总线吞吐的效率。OCP协议中的读写请求共用一个请求通道，且写数据与写请求同时发送。OCP协议可以通过OCP一致性扩展（OCP Coherence Extensions）实现对缓存一致性协议的支持。

AXI (Advanced eXtensible Interface)\citep{ARM2021}是ARM公司开发的高性能、低功耗的片上总线协议，支持突发传输、乱序访问等功能。其对总线通道进行了进一步的分离，分为读请求通道AR，读响应通道R，写请求通道AW，写数据通道W，写响应通道B。虽然写请求与写数据通道分离，但是在实际应用过程中依然可认为写请求与写数据同时发送。AXI协议适用于大型的SoC系统以及高性能环境，但是其不包含缓存一致性管理的功能。为了弥补缓存一致性支持的缺失，ARM公司随后在AXI总线的基础上推出了ACE\citep{ARM2021}总线协议，较AXI总线多出了用于维护缓存一致性的探听(Snoop)地址通道AC，探听响应通道CR，以及探听数据通道CD。由于ACE协议中的缓存一致性支持是后续添加的，因此其并未能良好地复用数据传输通道，导致了额外的开销。

TileLink\citep{TileLink2020}协议是RISC-V生态中常用的片上总线协议，旨在提供高性能无死锁的数据传输方案。TileLink分为5个通道，分别以字母顺序记为A、B、C、D和E通道。TileLink协议在设计之初即考虑了对缓存一致性协议的支持，其中A、D通道为强制要求实现的通道，B、C、E通道为缓存一致性维护所需通道。TileLink协议虽然已在RISC-V生态中得到了广泛的应用，但是其存在5个通道中有4个通道需要进行数据传输，要求写数据与写请求共同传输，写操作根据是否可缓存分布到不同通道等问题，导致该总线协议开销较大，物理实现较为复杂。

CHI(Coherent Hub Interface)\citep{ARM2024CHI}是ARM公司推出的高性能多核系统的片上总线协议，具有全系统缓存一致性支持和高扩展性特点。它支持多核处理器和大规模系统设计。CHI在设计之初便考虑了缓存一致性与大规模片上网络（Network on Chip,NoC）的支持，其采用基于流控单元（flit）的传输模式，只要接受方指示自己尚有可缓冲额度（credit）便可持续发送数据而不需要经过握手。CHI中共有6个接口，分别是TXREQ、RXRSP、TSRSP、RSRSP、TXDAT和RXDAT。其中只有TXDAT与RXDAT通道携带数据，允许写请求与写数据分离发送。CHI性能高，开销低，但是其实现与规则过于复杂，往往只有商业产品才会选用该总线协议。

纵观各类片上总线协议，可以发现总线协议在设计时设计需要关注通道的配置。例如，Wishbone总线协议因通道数量少且独占使用，导致总线性能受限；而TileLink协议则因数据通道数量多，增加了系统物理资源开销。同时，在总线协议设计的初始阶段就需要考虑缓存一致性的支持，否则可能导致无法有效维护缓存一致性或总线通道利用率低下。

每种总线协议在设计时都有其独特的考量和目标。针对特定应用场景进行总线协议的设计与优化，可以有效提升系统的性能表现。

\section{开源处理器研究平台及其访存子系统}

为了更好地开展处理器相关技术研究，或是为了便于在嵌入式环境中进行高能耗比的微处理器集成，许多研究者开展了开源处理器研究平台的开发工作。

目前影响力最大\citep{open_source}的开源处理器项目之一是伯克利大学开发的ChipYard项目，ChipYard是一个SoC生成器，为敏捷SoC开发提供了统一的框架和操作过程，其中包括了顺序执行处理器核Rocket和高性能乱序执行处理器核Boom，以及多种领域专用加速器。在访存子系统部分，ChipYard采用的是TileLink\citep{TileLink2020}缓存总线协议，并且设计了一个包含式的缓存，该缓存可配置为L2缓存或末级缓存。但是该缓存存在不利于物理实现的设计。尽管ChipYard的性能超过了AWS Graviton处理器的性能，但不及Intel的Skylate架构处理器性能。

“香山”\citep{micro2022xiangshan}是中科院计算所牵头开展的一个高性能开源处理器项目，去，其目的是构建一个体系结构创新开源平台。其目前已经进行了两个版本架构的迭代，是目前最高性能的开源RISC-V处理器。其访存子系统同样采用的是TileLink总线协议，其缓存子项目“huancun”是一个包含式的缓存，非包含式设计的版本正在开发中，采用基于目录的非包含式设计。“香山”处理器达到了到ARM Cortex A76处理器的水平，但是相较于Intel i3-10100处理器仍有明显差距。

VexRiscv\citep{VexRiscv}是一个由Papon Charles所开发的轻量级32位RISC-V开源处理器，该项目代码针对于FPGA优化，适合集成至嵌入式环境中。项目的代码采用SpinalHDL书写，将处理器的功能抽象为“插件”（plugin），允许在不修改处理器核心代码的前提下通过新增插件以增加新指令。在访存子系统方面，该项目采用的是AXI\citep{ARM2021}总线协议，但由于VexRiscv的主要设计目标是为FPGA提供一个轻量而高效的CPU实现，因此并没有实现末级缓存，而是通过写通式（Write Though）的L1缓存与软件控制来保持数据一致性。

CORE-V\citep{v_cores}系列处理器是由OpenHW小组（OpenHW Group）这一非盈利组织开发的开源RISC-V处理器。该系列的处理器均为单发射顺序执行，其主要设计目标是为嵌入式应用程序提供轻量可扩展的处理器核。在访存子系统方面，CORE-V系列处理器仅有一个高效的乱序多请求L1缓存CV-HPDcache，但是并没有实现一个末级缓存。

OpenPiton\citep{Balkind}是普林斯顿大学开发的开源众核处理器，其采用了平铺众核框架，核数可从1核扩展至5000万核。其处理器核部分采用的是修改后的OpenSPARC T1处理器，指令集架构是SPARC v9。在访存子系统方面，在处理器核侧采用的是OpenSPARC T1的私有CCX总线协议与L1缓存连接，L1缓存随后会经过L1.5缓存将总线协议转换为OpenPiton内部的NoC一致性协议。OpenPiton的L2缓存采用分布式设计，采用基于目录的MESI协议来维护缓存一致性，并通过NoC以2D网状拓扑的形式来连接。

综上所述，尽管存在多个开源处理器研究平台，但大部分项目的目标并非追求最高性能表现。VexRiscv和CORE-V专注于轻量级嵌入式处理器，OpenPiton则侧重于众核处理器及片上网络设计。ChipYard和香山项目致力于研发高性能处理器，但与最新的商业处理器相比仍有性能差距。在开源处理器研究平台的访存子系统方面，许多平台缺乏末级缓存，如VexRiscv和CORE-V仅有L1缓存。OpenPiton的缓存设计针对众核系统优化，不完全适用于通用处理器。而ChipYard与香山项目中的末级缓存设计仍有进一步优化的空间。


\section{缓存划分的发展}

随着处理器技术的发展，有学者开始研究如何将其片上缓存进行划分。将缓存进行划分的目的主要有两种。第一种是在多核的场景下，为了保证各核之间资源分配较为公平，或是为了保证整体系统的性能，需要将缓存资源进行划分，使得不会出现某一处理器核过度抢占缓存资源的现象。第二种缓存划分，则是由于CPU内存在着多种需要大量储存数据的单元，比如分支预测器、TLB等，这些单元往往受限于片内存储空间，或者为了保证低延迟，无法实现较大容量，而这些单元往往又需要通过提升容量的方式来提升性能。因此可以将其数据存放至缓存中，利用缓存的存储空间来扩充可用容量。

从划分比例保持的严格性来看，可以分为硬划分与软划分。在硬划分下，各缓存分区之间的比例被严格地保证，而软划分正好相反，软划分试图维持各分区之间的比例，但是不严格保证。从划分粒度来看，又可以分为基于路的划分，基于组的划分与基于缓存块的划分。

基于路的划分\citep{Albonesi_1999}\citep{Chiou_Jain_Rudolph_Devadas_2000}指的是将缓存中的若干路划分至不同分区的方式，通常属于硬划分，如Utility-Based Cache Partitioning\citep{Qureshi_Patt_2006}工作中，作者提出了一种依据LRU特性进行的缓存划分方式。但是基于路的划分往往只能以较粗的粒度进行，如16路组相连的缓存只能以1/16缓存容量的粒度进行划分，并且会导致缓存关联度的大幅度下降，从而损失性能。

而其他一些学者试图以更细的粒度进行划分，如以组的粒度甚至以缓存块的粒度进行划分，如PriSM\citep{Manikantan2012ProbabilisticSC}、Vantage\citep{Sanchez_Kozyrakis_2011}以及Futility Scaling\citep{Wang_Chen_2014}等工作。这类工作通常属于软划分，通过改变插入和替换算法，使得各分区中数据存在缓存中的概率接近目标分区的比例，从而达到划分的效果。

许多学者采用纯硬件的手段对缓存进行划分，但是也有学者试图采用软硬件结合的方式对缓存进行划分。如Lin等人的工作\citep{Zhang_Sadayappan_2008}中提出了基于页面着色的动态缓存划分算法，Zhang等人\citep{Zhang_Dwarkadas_Shen_2009}以及Jin等人\citep{Jin_Chen_Wang_Wang_Wen_Luo_Li_2009}的工作中也采用了类似的设计。

目前已有商用的处理器应用了缓存划分技术，如Intel在其商用处理器中实现了基于路的缓存划分，AMD在其Opteron处理器\citep{conway2010cache}中引入了硬件的多核负载检测机制，通过缓存划分的方法以防止某处理器核在运行缓存效率过低的程序时污染缓存。


\section{缓存重用的发展}

缓存在微处理器中的功能是提高其访存效率，由于缓存需要进行大量数据的存储，因此缓存成为了处理器片上容量最大的结构。而处理器的其他结构中也存在着许多需要进行数据存储的组件，如分支预测器，TLB，预取器等结构。而并非所有负载均能充分利用所有的缓存空间，因而有学者试图重用缓存的空间，使得其可以存储其他组件所需数据。

例如Predictor virtualization\citep{Burcea_Somogyi_Moshovos_Falsafi_2008}工作中，作者允许CPU将L2缓存进行配置，从而划分出部分空间来存储分支预测器的元数据，从而提高分支预测困难负载下的系统性能。ARM推出的Neoverse N2\citep{Pellegrini_2021}商用处理器实现了CMC预取器，但是该预取器所需容量较大，因而选择对L2缓存进行划分，以存放CMC预取器的元数据。在Victima\citep{Kanellopoulos_Nam_Bostanci_Bera_Sadrosadati_Kumar_Bartolini_Mutlu_2023}工作中，作者为了加速访存密集型负载的地址翻译过程，选择将L2缓存的空间动态地用于存储TLB的数据。

还有的工作不是将缓存重用于其他组件，而是在缓存层次结构内部进行重用。如Jenga\citep{Tsai_Beckmann_Sanchez_2017}工作中，作者发现有的应用更偏好于现有的分级缓存层次结构，有的应用则主要依赖于某一单层的缓存。因而作者将L3缓存资源进行动态分配，允许某些处理器核跳过L3缓存直接访问内存，或是将核A的L3缓存用作核B的L4缓存。IBM在其商业处理器z16\citep{9839561}上也采用了类似的设计，允许一个处理器核的L2缓存充当其他处理器核的虚拟L3缓存，甚至允许一个机架内的所有L2缓存被组织成一个虚拟的巨大L4缓存。

对于缓存空间的重用，还有一种类型是面向软件，或者称面向用户的重用。如FReaC Cache中\citep{Dhar_Wang_Franke_Xiong_Huang_Hwu_Kim_Chen_2020}，作者为了提升边缘设备与云服务器的能效，将末级缓存进行了重构，使得用户可以使用末级缓存一部分的空间用做可编程的LUT阵列，从而使得末级缓存变身为领域专用的加速器，以优化特定业务的性能与功耗。

缓存作为处理器片上容量最大的结构，但是在一些负载中性能的瓶颈并不在于缓存，而在于其他的组件。因此根据当前实际负载情况与应用类型，动态地将缓存资源重用以提升其他组件的性能，有助于整体处理器的性能提升。

\section{新型混合内存组织结构的发展}\label{sec:background_fusellc}

新型内存的出现，如采用3D封装DRAM技术的高带宽内存HBM，以及更低成本更大容量的非易失性内存NVM，使得内存系统除了传统的基于DRAM的内存有了更多的选择，新型的内存有望弥补传统DRAM内存带宽受限或是容量难以扩展的短板。但是新型内存也有着各自的缺点，如HBM高成本且容量受限，NVM则面临着低带宽与高延迟的问题。因此往往需要与传统的基于DRAM的内存混合使用。

混合内存从内存种类的构成来看可以分为两大类型，第一种是高带宽内存HBM与传统DRAM内存的组合，第二种则是基与DRAM的内存与慢速的NVM的组合。这两种内存组合的共性是，均采用了基于DRAM的快速内存与较慢的慢速内存的组合，因此这两者在设计时采用的设计与优化方法可以同用，区别只在于应用场景的不同。

从混合内存中快速内存的使用情况来看，可以分为两种类型。第一种是将快内存作为缓存使用，称为DRAM缓存（DRAM Cache，DC），这种设计下，快内存对于软件而言是透明的，其容量会被隐藏无法直接使用。第二种类型则是将快内存作为整体内存空间的一部分（Part of Memory,PoM）。

在这两种不同的混合内存设计中，都需要解决一个共同的挑战，那就是如何减少元数据访问的开销。由于快内存一般容量较大，可达GB级别，索引数据需要的元数据可达十几甚至几十MByte大小，远超片上可用空间。学者们大多将元数据存放至快内存内\citep{Loh_Hill_2011}。但是这会导致需要一次额外的DRAM访问才能获取元数据，产生巨大的元数据访问开销。

为了解决这问题，有学者试图通过改变组织方式来进行优化。loh和hill选择将元数据与数据共同存放至DRAM行中\citep{Loh_Hill_2011}，使得对元数据与数据的连续读取在缓冲区命中而减少延迟。Alloy缓存的设计中，则是使用了直接相连的结构，并且将元数据与数据紧密存放，使得一次读取就能取回两者。Hameed\citep{Hameed_Bauer_Henkel_2013}、Cha\citep{Cha_Kim_Park_Huh_2019}等人提出了将缓存关联度进行限制，从而使得一次内存访问可以取回一整个组元数据的方案。

还有的学者试图通过减少需要管理的快内存区域大小或数量的方式来减少元数据的开销。如有人采用以更粗的粒度，如4KB页，进行管理，从而降低了整体元数据的数量量\citep{Chaudhuri_Agrawal_Gaur_Subramoney_2017}\citep{Zhang_Sui_Hou_Zhang_2021}\citep{Jevdjic_Volos_Falsafi_2013}。而Hybrid2\citep{Vasilakis_Papaefstathiou_Trancoso_Sourdis_2020}的工作中，作者将快内存切割出一小块当作DRAM缓存使用，其余部分作为内存，从而使得DRAM缓存元数据可存放至SRAM内。Sim等人的工作中\citep{Sim_Alameldeen_Chishti_Wilkerson_Kim_2014}，他们引入了一小块重映射缓存，在缓存上可以进行高速的元数据访问。

但是许多方案只能优化数据命中时的开销，当发生数据缺失时，仍然需要一次额外的元数据查询才能知道数据未命中。因此许多学者试图采用各种缺失预测器来预测可能发生的缺失，如loh和hill提出了Miss Map结构，Alloy Cache\citep{Qureshi_Loh_2012}中采用了MAP-I和MAP-G缺失预测器，Sim等人的工作\citep{Sim_Loh_Kim_OConnor_Thottethodi_2012}中提出了HMP预测器。但是这些预测器本身也需要额外的数据存储以保留其预测信息，需要面临着命中率与片上资源占用的权衡。

虽然已经有许多学者试图从优化混合内存的组织结构方式来缓解混合内存高元数据访问开销的问题，但是单纯通过改变组织方式并不能完全消除其访问元数据的开销，且基于DRAM行缓冲区命中的优化手段基本到达极限，因此需要采用其他手段来进一步优化。


\section{基于SRAM的混合内存优化技术的发展}

混合内存中面临的巨大元数据访问开销的问题，其主要原因是元数据总量大，且存放于比片上SRAM访问慢一至两个数量级的DRAM内。由于混合内存的元数据本质也是一种特殊的数据，因此有学者试图模仿普通的数据缓存，通过一块额外的SRAM作为元数据缓存，从而降低其访问开销。

ATCache\citep{Huang_Nagarajan_2014}工作中，其作者引入了一块约47KB的SRAM充当元数据缓存，并通过连续行预取器（Next-N-Line Prefetcher）以优化该元数据缓存的命中率。但是由于该缓存容量过小，导致其在许多子项上命中率只有约50\%，且主要命中率的提升来自于预取器，因此需要额外引入MAP-I缺失预测器来在可能发生缺失时提前发送访存请求。

Hameed\citep{Hameed_Bauer_Henkel_2014}等人的工作中，也采用了类似的策略，其引入了一块64KB的SRAM作为元数据缓存，由于容量过小，作者提出了自适应插入策略以过滤利用率低的元数据。同时，该工作也极大地依赖连续行预取器以提升其命中率，由于命中率过低，甚至需要额外引入一个3MB的MissMap\citep{Loh_Hill_2011}缺失预测器来加速其未命中时的性能。

SILC-FM\citep{Ryoo_Meswani_Prodromou_John_2017}工作中，作者为混合内存的重映射表引入了一个32KB的缓存，称为SRC。由于作者采用了2KB为粒度对内存进行管理，因此其可以等效覆盖约25MB的混合内存空间，其命中率达到了80\%左右，属于相对可用的水平。

Hybrid2\citep{Vasilakis_Papaefstathiou_Trancoso_Sourdis_2020}工作中，作者创新性地将快内存分为两块，较小的一块用做DRAM缓存，而剩余的部分采用PoM的设计。由于作为DRAM缓存的部分较小，因此其元数据可以完全存储在SRAM内，作者将其称为XTA。在Hybrid2的工作中，作者采用了512KB大小的XTA。

受到Hrbrid2的启发，Baryon\citep{Li_Gao}工作中也采用了两分区式的快内存设计。作者将快内存分出一小块，称之为Stage Area，当数据被逐出Stage Area时，数据会被压缩而节省空间。由于Stage Area较小，因此其元数据（Stage Tag Array）的容量仅为448KB，可完全存储于SRAM内。

与直接引入一块SRAM作为单独的元数据缓存不同，有的学者试图复用片上已有结构中的SRAM空间，使得其可以包含部分的混合内存元数据，从而达到加速元数据访问的效果。

Tagless DRAM Cache\citep{Lee_Kim_Jang_Yang_Kim_Jeong_Lee_2015}工作中，作者观察到在处理器访问内存时实际要经过两个翻译过程：从虚拟地址到物理地址，以及从物理地址到缓存内地址。这两个步骤分配是通过TLB与缓存的标签来实现。因此作者通过修改TLB的方式来使得TLB可以一步完成这两个翻译过程。本质上这是将元数据交由TLB存储。但是这也限制了DRAM缓存的块大小必须与操作系统的页一致，使得设计丧失了部分灵活性。

FusionCache\citep{Vasilakis_Papaefstathiou_Trancoso_Sourdis_2018}工作中，作者试图使得LLC的标签包含DRAM缓存对应的元数据信息，使得LLC的标签实际上充当了一个元数据缓存。但是为了实现该设计，要求所有属于同一DRAM缓存行的数据必须包含在同一个LLC 组中，这降低了LLC的性能，尤其当DRAM缓存行较大时，会产生更多的冲突和不必要的逐出。

Decoupled Fused Cache\citep{10.1145/3293447}工作中，作者试图改进FusionCache工作中的缺点。该工作中同样是将DRAM缓存的元数据放置于LLC的标签中存储，但是作者将LLC的结构从传统的组相连改为了Decouple Cache\citep{Seznec_2002}的结构，从而使得LLC的设计与DRAM缓存的设计解耦合。

采用基于SRAM的元数据缓存以加速混合内存的元数据访问已被许多工作所使用，其加速效果也被多次验证。但是由于片上空间有限，额外引入SRAM的方案中可用的SRAM空间较小，大小从几十KB至512KB不等。而目前通过复用片上结构SRAM空间的方法中，复用的片上结构自身可用容量也较小，因此得到的等效SRAM元数据缓存容量也较小。这两种方案都无法达到足够大的SRAM元数据缓存空间，使得在高内存负载的场景下，并不能满足高命中率的需求。

}
